﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using BussinessLogicTecnoPez;
using BussinessLogicTecnoPez.Tipos_Comunes;
using Tecnopez.Globals;
using Microsoft.Practices.EnterpriseLibrary.Validation;

public partial class Modules_Tipos_ABMTiposClientes : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack == false)
        {
            SetMode(PageMode.ListMode);
        }
        InicializarValidadores();
        InicializarGrilla();

        cmdEliminar.Attributes.Add("onClick", "return confirm('Esta seguro de eliminar el registro?');");

        GenericMasterPage master = (GenericMasterPage)this.Master;
        master.Imagen = "../Styles/Icons/configurar.gif";
        master.Titulo = "Tipos de Clientes";
        cargarGrilla();
        _lblError.Text = "";
    }

    private void cargarGrilla()
    {
        TipoCliente.getManager.ClearFilters();
        TipoCliente.getManager.ClearOrders();
        TipoCliente.getManager.AddFilter("DESCRIPCION", GenericManager<TipoCliente>.filterOperator.Like, "%" + txtBuscarDescripcion.Text.Trim() + "%");

        if (ViewState["orden"] == null)
        {
            TipoCliente.getManager.AddOrder("IDTIPOCLIENTE", GenericManager<TipoCliente>.Order.orderDirection.DESC);
        }
        else
        {
            TipoCliente.getManager.AddOrder(ViewState["orden"].ToString(), (GenericManager<TipoCliente>.Order.orderDirection)ViewState["ordenDireccion"]);

        }

        List<TipoCliente> lista = new List<TipoCliente>();
        lista = TipoCliente.getManager.GetFilter();
        lista = TipoCliente.getManager.GetFilter();
        grdTiposClientes.DataSource = lista;
        grdTiposClientes.DataBind();        
    }

    private void SetMode(PageMode mode)
    {
        ViewState["PageMode"] = mode;
        #region Todos los casos
        switch (mode)
        {
            case PageMode.ListMode:
                grdTiposClientes.Enabled = true;
                cmdBuscar.Enabled = true;
                cmdNuevo.Enabled = true;
                wzrABM.ActiveStepIndex = 0;
                break;
            case PageMode.NewMode:
                grdTiposClientes.Enabled = false;
                cmdBuscar.Enabled = false;
                cmdNuevo.Enabled = false;
                wzrABM.ActiveStepIndex = 1;
                txtID.Enabled = false;
                txtDescripcion.Enabled = true;
                txtAbreviatura.Enabled = true;
                cmdAceptar.Visible = true;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = false;
                cmdEliminar.Enabled = false;
                break;
            case PageMode.EditMode:
                grdTiposClientes.Enabled = false;
                cmdBuscar.Enabled = false;
                cmdNuevo.Enabled = false;
                wzrABM.ActiveStepIndex = 1;
                txtID.Enabled = false;
                txtDescripcion.Enabled = true;
                txtAbreviatura.Enabled = true;
                cmdAceptar.Visible = true;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = false;
                cmdEliminar.Enabled = false;
                break;
            case PageMode.ViewMode:
                grdTiposClientes.Enabled = false;
                cmdBuscar.Enabled = false;
                cmdNuevo.Enabled = false;
                wzrABM.ActiveStepIndex = 1;
                txtID.Enabled = false;
                txtID.ForeColor = System.Drawing.Color.Black;
                txtDescripcion.Enabled = false;
                txtDescripcion.ForeColor = System.Drawing.Color.Black;
                txtAbreviatura.Enabled = false;
                txtAbreviatura.ForeColor = System.Drawing.Color.Black;
                cmdAceptar.Visible = false;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = true;
                cmdEliminar.Enabled = true;
                break;
        }
        #endregion

    }

    protected void cmdEditar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.EditMode);
        cargarGrilla();
    }

    protected void cmdEliminar_Click(object sender, EventArgs e)
    {
        //mensage confirmación
        TipoCliente objTipoCliente = new TipoCliente();
        objTipoCliente.IdTipoCliente = int.Parse(txtID.Text.Trim());
        int res = TipoCliente.getManager.Delete(objTipoCliente);
        cargarGrilla();
        SetMode(PageMode.ListMode);
    }

    protected void cmdNuevo_Click(object sender, EventArgs e)
    {
        txtID.Text = "";
        txtDescripcion.Text = "";
        txtAbreviatura.Text = "";
        SetMode(PageMode.NewMode);
    }

    protected void cmdAceptar_Click(object sender, EventArgs e)
    {
        try
        {
            TipoCliente objTipoCliente = new TipoCliente();
            objTipoCliente.Descripcion = txtDescripcion.Text.Trim();
            objTipoCliente.Abreviatura = txtAbreviatura.Text.Trim();
            if (validar(objTipoCliente))
            {
                if (getMode() == PageMode.NewMode)
                {
                    if (TipoCliente.getManager.Insert(objTipoCliente) != true)
                    {
                        throw TipoCliente.getManager.GeneratedException;
                    }
                    SetMode(PageMode.ListMode);
                }
                else
                {
                    objTipoCliente.IdTipoCliente = int.Parse(txtID.Text.ToUpper().Trim());
                    if (TipoCliente.getManager.Update(objTipoCliente) != true)
                    {
                        throw TipoCliente.getManager.GeneratedException;
                    }
                    SetMode(PageMode.ViewMode);
                }
            }
            cargarGrilla();
        }
        catch (Exception exc)
        {
            _lblError.Text = "error: No se pudo realizar la operación";
            Functions.LogError(exc);
            SetMode(PageMode.NewMode);
        }
    }

    protected void cmdCancelar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.ListMode);
    }


    private void InicializarValidadores()
    {
        PPVDescripcion.SourceTypeName = "BussinessLogicTecnoPez.Tipos_Comunes.TipoCliente";
        PPVDescripcion.ControlToValidate = "txtDescripcion";
        PPVDescripcion.PropertyName = "Descripcion";
        PPVDescripcion.DisplayMode = ValidationSummaryDisplayMode.List;

        PPVAbreviatura.SourceTypeName = "BussinessLogicTecnoPez.Tipos_Comunes.TipoCliente";
        PPVAbreviatura.ControlToValidate = "txtAbreviatura";
        PPVAbreviatura.PropertyName = "Abreviatura";
        PPVAbreviatura.DisplayMode = ValidationSummaryDisplayMode.List;
    }

    private void InicializarGrilla()
    {
        GrdViewInitializator<TipoCliente> confG = new GrdViewInitializator<TipoCliente>(ViewState, "orden", "ordenDireccion", true, cargarGrilla);

        ButtonField colB = new ButtonField();
        colB.ButtonType = ButtonType.Image;
        colB.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/lupa.png";
        colB.HeaderText = "Edición";
        colB.CommandName = "ver";
        colB.HeaderStyle.Width = 5;
        colB.ItemStyle.HorizontalAlign = HorizontalAlign.Center;

        ButtonField[] d = new ButtonField[1];
        d[0] = colB;

        confG.gridViewSetup(this.grdTiposClientes, false, d);

    }

    private bool validar(TipoCliente objeto)
    {
        ValidationResults v = Validation.Validate<TipoCliente>(objeto);
        if (!v.IsValid)
        {
            _lblError.Text = "Error en el formulario: Por favor verifique los campos ingresados.";
        }
        return v.IsValid;
    }

    private PageMode getMode()
    {
        if (ViewState["PageMode"] == null)
            return PageMode.ModeNotFound;
        return (PageMode)ViewState["PageMode"];
    }

    #region Antigua forma de configurar la grilla
    //private void configurarGrilla()
    //{
    //    grdTiposDocumentos.AutoGenerateColumns = false;
    //    grdTiposDocumentos.AllowPaging = true;

    //    grdTiposDocumentos.PageSize = 10;
    //    grdTiposDocumentos.PagerSettings.Mode = PagerButtons.NextPrevious;
    //    grdTiposDocumentos.PagerSettings.NextPageText = "Siguiente";
    //    grdTiposDocumentos.PagerSettings.PreviousPageText = "Anterior";

    //    grdTiposDocumentos.AllowSorting = true;


    //    BoundField col = new BoundField();
    //    col.DataField = "idTipoDocumento";
    //    col.HeaderText = "Código";
    //    col.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
    //    col.SortExpression = "idTipoDocumento";
    //    grdTiposDocumentos.Columns.Add(col);

    //    col = new BoundField();
    //    col.DataField = "Descripcion";
    //    col.HeaderText = "Descripción";
    //    col.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
    //    col.SortExpression = "Descripcion";
    //    grdTiposDocumentos.Columns.Add(col);

    //    col = new BoundField();
    //    col.DataField = "Abreviatura";
    //    col.HeaderText = "Abreviatura";
    //    col.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
    //    col.SortExpression = "Abreviatura";
    //    grdTiposDocumentos.Columns.Add(col);

    //    ButtonField colB = new ButtonField();
    //    colB.ButtonType = ButtonType.Link;
    //    colB.Text = "ver";
    //    colB.CommandName = "ver";
    //    grdTiposDocumentos.Columns.Add(colB);

    //    grdTiposDocumentos.DataKeyNames = new string[] { "idTipoDocumento" };
    //}


    //protected void grdTiposDocumentos_Sorting(object sender, GridViewSortEventArgs e)
    //{
    //    GenericManager<TipoDocumento>.Order.orderDirection direccion;
    //    if (ViewState["ordenDireccion"] != null)
    //    {
    //        direccion = (GenericManager<TipoDocumento>.Order.orderDirection)ViewState["ordenDireccion"];
    //        if (direccion == GenericManager<TipoDocumento>.Order.orderDirection.ASC && ViewState["orden"].ToString() == e.SortExpression)
    //        {
    //            direccion = GenericManager<TipoDocumento>.Order.orderDirection.DESC;
    //        }
    //        else
    //        {
    //            direccion = GenericManager<TipoDocumento>.Order.orderDirection.ASC;
    //        }
    //    }
    //    else
    //    {
    //        direccion = GenericManager<TipoDocumento>.Order.orderDirection.ASC;
    //    }
    //    ViewState.Add("orden", e.SortExpression);
    //    ViewState.Add("ordenDireccion", direccion);
    //    cargarGrilla();
    //    /*grdTiposDocumentos.Sort(e.SortExpression,)*/

    //}


    //protected void grdTiposDocumentos_PageIndexChanging(object sender, GridViewPageEventArgs e)
    //{
    //    grdTiposDocumentos.PageIndex = e.NewPageIndex;
    //    cargarGrilla();
    //}
    #endregion
    protected void grdTiposClientes_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "ver")
        {
            int o = int.Parse(e.CommandArgument.ToString());
            cargarGrilla();
            int idTipoCliente = int.Parse(grdTiposClientes.DataKeys[o].Value.ToString());
            TipoCliente.getManager.ClearFilters();
            TipoCliente.getManager.AddFilter("idTipoCliente", BussinessLogicTecnoPez.GenericManager<TipoCliente>.filterOperator.Equals, idTipoCliente);
            TipoCliente objTipoCliente = TipoCliente.getManager.GetOne();
            txtID.Text = objTipoCliente.IdTipoCliente.ToString();
            txtDescripcion.Text = objTipoCliente.Descripcion.Trim();
            txtAbreviatura.Text = objTipoCliente.Abreviatura.Trim();
            SetMode(PageMode.ViewMode);
        }
    }
}
